#include <iostream>
#include<iomanip>
using namespace std;
int max(int data[],int n)//计算多少位
{
    int m=0,i,j;
    j=data[0];
    for(i=0;i<n;i++)
    {
        if(data[i]>j)
            j=data[i];
    }
    while(j>0)
    {
        m++;
        j=j/10;
    }
    return m;
}

void basesort(int data[],int n)
{
    int maxx=max(data,n);
    int num=1;
    for(int t=0;t<maxx;t++)//循环多少次
    {
        int count[10],temp[10][n];
        for(int f=0;f<10;f++)
            count[f]=0;
        for(int i=0;i<10;i++)
            for(int j=0;j<n;j++)
             temp[i][j]=0;//置零
        for(int i=0;i<n;i++)
        {
            int e=data[i]/num;
            int f=e%10;
            count[f]++;//计算多少个
            temp[f][count[f]-1]=data[i];//放在二维数组中
        }
        int a=0;
        for(int i=0;i<10;i++)
        {
            if(count[i]>0)
            {
                for(int j=0;j<count[i];j++)
                {
                    data[a]=temp[i][j];//收回
                    a++;
                }
            }
        }
        for(int i=0;i<n;i++)
        cout<<setfill('0')<<setw(maxx)<<data[i]<<" ";
        cout<<endl;
        num=num*10;
    }
}
int main()
{
    int n;
    cin>>n;
    int data[n];
    for(int i=0;i<n;i++)
        cin>>data[i];
    basesort(data,n);
    return 0;
}
